終於到第十天拉,距離結束基礎語法只剩幾天了,有沒有感到不捨阿
目前計畫跟原本預先想的差不多,但是我在想要不要先介紹幾個常用的套件@@
讓我再想個幾天吧。
今天要介紹的是 enum 列舉體
那這個東西讓 Rust 的簡潔度更高,也有了更多的表現力
這次我也會聯合錯誤處理也就是 Result<T, E> 跟 Option 下去說明。
因為這些錯誤處理就是依靠 enum 構成的。
首先看個簡單的例子
pub enum Option<T> {
None,
Some(T),
}
那上面就是 Option 的架構,可以發現其實上面也利用了之前所講的泛型
和結構體不同的是 列舉體 裡面存的是值 而不是類型。也就是說利用 enum 可以在 Rust 中實現 多型。
enum Sizes {
Big,
Medium,
Small,
}
上面就是個以大小區分的 列舉體。
那可以這樣使用
let owo = Sizes::Big;
match owo {
Big => {println!("Ur Big")},
Medium => {println!("U Good")},
Small => {println!("eat more")},
}
那以上是最基礎的使用方式,但是絕對不只於此
因為他是可以帶資料的。
enum Event {
KeyPress(char),
Click { x: i64, y: i64 },
}
fn input(event: Event) {
match event {
Event::KeyPress(c) => {println!("{}", c)}
Event::Click{x, y} => {
println!("{} {}", x, y);
}
}
}
就像這樣使用
以上是枚舉的基礎利用
那我剛剛講到 Result 跟 Option 是為了錯誤處理而出現地。
而 Result 跟 Option 差別在哪我下面會提到
Result 是拿來幹嘛的?
Result 是使用列舉體去構成的 原碼如下:
enum Result<T, E> {
Ok(T),
Err(E),
}
你可以發現 有個 Ok 跟 Err 廢話
Ok 表示的是這個能夠成功使用
Err 則反
有點類似 try...catch
那麼如果說只想拿 Ok 的情況略過撰寫 match 的話可以使用 unwrap 或是加個問號
還有一個 expect 但是 expect 是當 err 出現時會跑到但是不取值
也就是說可以直接拿來看是否是因為這個部分而導致程式錯誤喔。
那其實 Result 跟 Option 的差別並不大差別只在於
一個是抓錯誤進行處理,一個是當沒有回傳時進行處理。
今天大概這樣 晚安各位
有問題請提問